#pragma once

#include <cstdint>
#include <DirectXMath.h>

#include "utils/BufferData.h"

struct KinematicInfo;
struct ID3D11Buffer;

struct IndexedBufferInfo {
	ID3D11Buffer* mVertexBuffer;
	ID3D11Buffer* mIndexBuffer;
	uint32_t mBaseVertexLocation;
	uint32_t mStartIndexLocation;
	uint32_t mIndexCount;

	IndexedBufferInfo();
};

struct NonIndexedBufferInfo {
	ID3D11Buffer* mVertexBuffer;
	uint32_t mBaseVertexLocation;
	uint32_t mVertexCount;

	NonIndexedBufferInfo();
};

struct Vertex {
	DirectX::XMFLOAT3 mPos;
	DirectX::XMFLOAT2 mTexC;

	Vertex(const DirectX::XMFLOAT3& pos = DirectX::XMFLOAT3(0.0f, 0.0f, 0.0f), const DirectX::XMFLOAT2& texC = DirectX::XMFLOAT2(0.0f, 0.0f));

	Vertex(const float posX, const float posY, const float posZ, const float texCU, const float texCV);
};

struct InstanceBuffer {
	BufferData<KinematicInfo*> mBuffer;
	uint32_t mNumInstances;
};